/********************************************************************** 
 * FILE		: AbstractFileUtil.java					
 *			
 * AUTHOR   : kloyf		
 * 
 * DATE		: 2011-6-3
 * 									
 * REASON	: CREATE  
 *            							
 * VERSION  ：0.0.1
 *
 ***********************************************************************/
package com.common.util.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

import javax.imageio.stream.ImageInputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.common.util.BaseUtil;
import com.common.util.clazz.ClassUtilTools;

/**
 * 文件工具类的抽象类
 * 
 * @author kloyf
 * @version 0.0.1
 * 
 */
public  abstract class AbstractFileUtil extends BaseUtil {

	private static Class<AbstractFileUtil> clazz = AbstractFileUtil.class;
	/**
	 * 输出EXCEL的对象
	 */

	/**
	 * 关闭文件流
	 * 
	 * @param obj
	 *            各种文件流。<br>
	 *            只要是继承自Stream都可以。无参数限制
	 * 
	 * @return boolean 关闭成功返回true，否则返回false。
	 */
	public static boolean closeStream(Object... obj) {
		if (obj.length > 0) {
			for (int i = 0; i < obj.length; i++) {
				String className = ClassUtilTools.getObjectName(obj[i]);
				if ("java.io.InputStream".equals(className)) {
					FileInputStream fis = (FileInputStream) obj[i];
					try {
						fis.close();
					} catch (IOException e) {
						debug(clazz, e);
					}
				}
				if ("java.io.InputStreamReader".equals(className)) {
					FileInputStream fis = (FileInputStream) obj[i];
					try {
						fis.close();
					} catch (IOException e) {
						debug(clazz, e);
					}
				}
				if ("java.io.FileInputStream".equals(className)) {
					FileInputStream fis = (FileInputStream) obj[i];
					try {
						fis.close();
					} catch (IOException e) {
						debug(clazz, e);
					}
				}
				if ("java.io.OutputStream".equals(className)) {
					FileOutputStream os = (FileOutputStream) obj[i];
					try {
						os.close();
					} catch (IOException e) {
						debug(clazz, e);
					}
				}
				if ("java.io.FileOutputStream".equals(className)) {
					FileOutputStream os = (FileOutputStream) obj[i];
					try {
						os.close();
					} catch (IOException e) {
						debug(clazz, e);
					}
				}
				if ("javax.imageio.stream.ImageInputStream".equals(className)) {
					ImageInputStream iis = (ImageInputStream) obj[i];
					try {
						iis.close();
					} catch (IOException e) {
						debug(clazz, e);
					}
				}
				if ("java.io.FileWriter".equals(className)) {
					FileWriter fw = (FileWriter) obj[i];
					try {
						fw.close();
					} catch (IOException e) {
						debug(clazz, e);
					}
				}
				

			}
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 获得对象的绝对路径
	 * 
	 * @param obj
	 * @return 返回对象的绝对路径
	 */
	public static String getClassUrl(Object obj) {
		String className = obj.getClass().getResource("").getPath();
		return className.substring(1, className.length());
	}

	/**
	 * 获得工程绝对路径
	 * 
	 * @return 工程绝对路径
	 */
	public static String getProjectUrl() {
		return System.getProperty("user.dir");
	}

	/**
	 * 返回一个文件对象
	 * 
	 * @param path
	 *            文件路径
	 * @return 返回一个文件对象
	 */
	public static File getFile(String path) {
		return new File(path);
	}

	/**
	 * 返回一个HSSFWorkbook对象。 使用同一个对象实例。
	 * 
	 * @return HSSFWorkbook 返回HSSFWorkbook类型
	 */
	public static HSSFWorkbook getWorkbook() {
		return new HSSFWorkbook();
	}
}